/**
 * 作者: 会写BUG
 * 创作日期: 2025/3/31 19:05
 * 描述: cwbQtPractice.ScoreRecord
 *
 **/
#pragma once

#include <QObject>
#include <QSharedPointer>
#include <QFile>
#include <QTextStream>

#define SCORE_RECORD ScoreRecord::instance()

class ScoreRecord
    : public QObject {
    Q_OBJECT

public:
    static ScoreRecord* instance() {
        if (instance_ == nullptr) {
            instance_ = new ScoreRecord();
        }
        return instance_;
    }
    ~ScoreRecord() override;

    /* 设置分数 */
    void setScore(int _score);
    /* 设置最高分数 */
    void setTopScore(int _score);
    /* 分数 */
    int score() const;
    /* 最高分数 */
    int topScore() const;
    /* 设置数字板内容 */
    void setChessNumber(int _index, int _number);
    /* 获取当前数字棋盘对应数据 */
    QList<int> chessNumbers() const;
    /* 重置全部数字板内容 */
    void resetChessNumber();
    /* 初始化记录文件 */
    void initRecord();
    /* 加载已经存在的数据 */
    void loadRecord();
    /* 获取一共有几条数据 */
    int recordCount() const;
    /* 重置到指定记录，不可逆 */
    void resetRecord(int _index);
    /* 是否有记录 */
    bool hasRecord() const;
    /* 记录当前游戏状态 */
    void record();
    /* 获取新的数字位置 位置，数值 */
    QPair<int, int> newChessPos();

Q_SIGNALS:
    void chessChanged();

private:
    explicit ScoreRecord(QObject * _parent = nullptr);
    static ScoreRecord* instance_;
    /* 当前分数 */
    int score_ = 0;
    /* 最高分数 */
    int top_score_ = 0;
    /* 全部数据格对应数据 */
    QList<int> chess_numbers_ = {};
    /* 保存数据的字符串 */
    QStringList records_ = {};
    /* 保存当前数据-明文 */
    QTextStream record_stream_ = {};
    QFile record_file_ = {};
};
